package com.zomiot.portal.user.entity;


import com.baomidou.mybatisplus.annotation.*;
import com.zomiot.portal.auth.constant.UserRole;
import com.zomiot.portal.auth.constant.UserState;
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;

import java.time.LocalDateTime;

/**
 * 用户持久化对象
 *
 * 对应数据库表：portal_user
 *
 * @author Joash_YI
 */
@TableName("portal_user")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserPO {

    /**
     * 主键ID
     * 使用数据库自增策略
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户名（登录账号）
     * - 唯一，不可重复
     * - 不可为空
     * - 长度：3-32字符
     */
    @TableField("username")
    private String username;

    /**
     * 密码哈希值
     * - 不可为空
     * - 存储经过BCrypt加密后的密码
     * - 长度：60字符（BCrypt固定长度）
     */
    @TableField("password_hash")
    private String passwordHash;

    /**
     * 显示名称（昵称）
     * - 可为空（默认使用username）
     * - 长度：1-32字符
     */
    @TableField("display_name")
    private String displayName;

    /**
     * 手机号
     * - 可为空（预留扩展）
     * - 唯一索引
     * - 长度：11字符
     */
    @TableField("telephone")
    private String telephone;

    /**
     * 邮箱
     * - 可为空（预留扩展）
     * - 唯一索引
     * - 长度：最大100字符
     */
    @TableField("email")
    private String email;

    /**
     * 用户角色
     * - 枚举类型，存储为字符串
     * - 默认值：MEMBER（普通会员）
     */
    @TableField("role")
    @Builder.Default
    private UserRole role = UserRole.MEMBER;

    /**
     * 用户状态
     * - 枚举类型，存储为字符串
     * - 默认值：ACTIVE（正常激活）
     */
    @TableField("state")
    @Builder.Default
    private UserState state = UserState.ACTIVE;

    /**
     * 创建时间
     * - 自动填充，无需手动设置
     * - 不可更新
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 最后更新时间
     * - 自动更新
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 最后登录时间
     * - 可为空
     * - 每次登录后更新
     */
    @TableField("last_login_time")
    private LocalDateTime lastLoginTime;

    /**
     * 备注
     * - 可为空
     * - 用于管理员添加备注信息
     */
    @TableField("remark")
    private String remark;
}
